package com.mtcarpenter.sequentialparallel;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;

/**
 * @Author: mtcarpenter
 * @describe
 * @Date: 2019/10/7
 * @Version 1.0
 */
public class SequentialParallelTest {

    /**
     * sequential 通过集合方式创建串行流
     */
    @Test
    public void test01() {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 10000000; i++) {
            double d = Math.random() * 1000;
            list.add(d + "");
        }
        //获取系统开始排序的时间点
        long start = System.nanoTime();
        int count = (int) ((Stream) list.stream().sequential()).sorted().count();
        //获取系统结束排序的时间点
        long end = System.nanoTime();
        //得到串行排序所用的时间
        long ms = TimeUnit.NANOSECONDS.toMillis(end - start);
        System.out.println(ms + "ms");

    }

    /**
     * 2 parallel  通过集合方式创建并行流
     */
    @Test
    public void test02(){
        List<String> list = new ArrayList<String>();
        for(int i=0;i<10000000;i++){
            double d = Math.random()*1000;
            list.add(d+"");
        }
        //获取系统开始排序的时间点
        long start = System.nanoTime();
        int count = (int)((Stream) list.stream().parallel()).sorted().count();
        //获取系统结束排序的时间点
        long end = System.nanoTime();
        //得到并行排序所用的时间
        long ms = TimeUnit.NANOSECONDS.toMillis(end-start);
        System.out.println(ms+"ms");
    }



}
